#include "HuevoReloj.h"

using namespace TP::Juego::Arena::Actores;
using namespace TP::Juego::Arena::Utilidades;
using namespace std;

HuevoReloj::HuevoReloj() : Huevo(HUEVORELOJ) {
	this->setVida(vida_huevo_poche);
	this->_tiempoRequerido = 0;
	this->setVida(vida_huevo_reloj);
	this->setVida(vida_huevo_reloj);
	this->setVida(vida_huevo_reloj);
	this->_timer = 0;
}

HuevoReloj::HuevoReloj(const string& pNombre, unsigned int tiempoRequerido) :
		Huevo(pNombre) {
	this->setVida(vida_huevo_poche);
	this->_tiempoRequerido = tiempoRequerido;
	this->setVida(vida_huevo_reloj);
	this->setVida(vida_huevo_reloj);
	this->setVida(vida_huevo_reloj);
	this->_timer = 0;
}

HuevoReloj::~HuevoReloj() { }

string HuevoReloj::aXML() {
	TiXmlDocument* doc = new TiXmlDocument();
	TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", "");
	doc->LinkEndChild(decl);

	doc->LinkEndChild(this->aElementoXML());

	TiXmlPrinter printer;
	doc->Accept(&printer);
	return printer.CStr();
}

string HuevoReloj::aXML(const string& pPath) {
	TiXmlDocument* doc = new TiXmlDocument(pPath.c_str());
	TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", "");
	doc->LinkEndChild(decl);

	doc->LinkEndChild(this->aElementoXML());

	TiXmlPrinter printer;
	doc->Accept(&printer);
	return printer.CStr();
}

void HuevoReloj::parseXML(const string& pDescriptor) {
	TiXmlDocument doc;
	doc.Parse(pDescriptor.c_str(), 0, TIXML_ENCODING_UTF8);
	this->deElementoXML(doc.FirstChildElement());
}

TiXmlElement* HuevoReloj::aElementoXML() {
	TiXmlElement * element = new TiXmlElement(HUEVORELOJ);
	element->SetAttribute("nombre", this->Nombre().c_str());
	element->LinkEndChild(this->getTrayectoria()->aElementoXML());
	return element;
}

void HuevoReloj::deElementoXML(TiXmlElement* pElemento) {
	if (strcmp(pElemento->Value(), HUEVORELOJ) == 0) {
		this->setNombre(pElemento->Attribute("nombre"));
		Trayectoria* trayectoria = new Trayectoria();
		trayectoria->deElementoXML(pElemento->FirstChildElement());
		this->setTrayectoria(trayectoria);
	}
}

double HuevoReloj::getRadio() {
	return radio_huevo_reloj;
}

int HuevoReloj::getPuntosDestruccion() {
	return puntos_huevo_reloj;
}

double HuevoReloj::getDanioContraCerdito() {
	return danio_huevo_reloj_cerditos;
}

double HuevoReloj::getDanioContraSuperficie() {
	return danio_huevo_reloj_superficie;
}

double HuevoReloj::getDanioContraPajarito() {
	return danio_huevo_reloj_pajaro;
}